Software Mathematica na střední škole

Jakub Šerých, serych@panska.cz

Využití ve výuce “on the fly”

Občas se ve výuce narazí na nějakou okamžitou otázku, kterou je třeba studentům objasnit.

Například aproximace funkce sinus lineární funkcí v okolí nuly:

Plot[{Sin[x],x},{x,-1,1},AspectRatio->Automatic]

... nebo s použitím jednoduché interaktivity

Manipulate[((a-Sin[a])/( a))100,{a,-1,1}]

Jiným příkladem může být vizualizace řešení jednoduché nerovnice s absolutní hodnotou:

Graficky najděte řešení  |x-3|-5 ≤ 0

Plot[Abs[x-3]-5 ,{x,-10,10}]

... a s mírným rozšířením o interaktivní ovládání:

Manipulate[
Plot[Abs[Abs[x - vodor]-svis2] - svis , {x, -12, 12},
AspectRatio->Automatic, AxesOrigin->{0,0}],
{vodor,-8,8},
{svis,-8,8},
{svis2,-5,5}
]

Složitější ukázky je ale lepší předem pečlivěji propracovat

parametry= {
{{{-5,5},{0,6}},{{-5,5},{-1,1}}, None},(* konstanta*)
{{{-5,5},{-5,5}},{{-5,5},{0,2}}, None},(* x *)
{{{-10,10},{0,100}},{{-10,10},{-20,20}}, None}, (* x^2 *)
{{{-10,10},{-1000,1000}},{{-10,10},{0,300}}, None}, (* x^3 *)
{{{-10,10},{-10,10}},{{-10,10},{-100,0}}, x==0}, (* 1/x *)
{{{-2,4},{0,260}},{{-2,4},{0,300}}, None}, (* (4^x) *)
{{{0.0001,100},{-5,5}},{{0.0001,100},{0,20}},None}, (* log x *)
{{{0,4Pi},{-1,1}},{{0,4Pi},{-1,1}}, None}, (* sin x *)
{{{0,4Pi},{-1,1}},{{0,4Pi},{-1,1}}, None}, (* cos x *)
{{{0,2Pi},{-50,50}},{{0,2Pi},{0,150}},Cos[x]==0},(* tangens *)
{{{0.001,2Pi},{-50,50}},{{0.001,2Pi},{-150,0}},Sin[x]==0} (* cotangens *)

};
Manipulate[
par= Switch[fs,
fcon, parametry[[1]],
fx,  parametry[[2]],
fx2,parametry[[3]],
fx3,parametry[[4]],
f1lomx,parametry[[5]],
f4nax,parametry[[6]],
flog,parametry[[7]],
fsin,parametry[[8]],
fcos,parametry[[9]],
ftan,parametry[[10]],
fcot,parametry[[11]]
];
fce[x_]=Switch[fs,
fcon,5,
fx, x,
fx2,(x^2),
fx3,(x^3),
f1lomx,(x^(-1)),
f4nax, (4^x),
flog, Log[x],
fsin, Sin[x],
fcos, Cos[x],
ftan,Tan[x],
fcot,Cot[x]
];
xmin=par[[1,1,1]];
xmax=par[[1,1,2]];
delX=(xmax-xmin)/10;
smer=D[fce[x],x]/.x->bodX;
deriv[x_]=D[fce[x],x];

Grid[{
{Style["f(x)=" <>ToString[TraditionalForm[fce[x]]],"Subsubtitle"]},
{Show[
Plot[fce[x],{x,xmin,xmax} ,
AxesOrigin->{0,0},
Axes->{True,True},
PlotRange->par[[1]],
PlotStyle->Thick,
Exclusions->par[[3]],
ExclusionsStyle->Dashing[Small],
ImageSize->{380,280}],
Graphics[
{PointSize[Large],Orange,Point[{bodX,fce[bodX]}],
Line[{{bodX-delX,fce[bodX]-smer delX},{bodX+delX,fce[bodX]+smer delX}}]
}
]]},
{Style["f'(x)=" <>ToString[TraditionalForm[deriv[x]]] ,"Subsubtitle"]},
{Plot[deriv[x],{x,xmin,bodX+0.001},
AxesOrigin->{0,0},
Axes->{True,True},
PlotRange->par[[2]],
PlotStyle->Thick,
Exclusions->par[[3]],
ExclusionsStyle->Red,
ImageSize->{380,280}
]}}],
{{fs,ftan,"Výběr funkce:"},
{fcon->"konst. fce.",
fx->"x",
fx2->"(x^2)",
fx3->"(x^3)",
f1lomx->"(x^(-1))",
f4nax->"(4^x)",
flog->"log x",
fsin-> "sin x",
fcos->"cos x",
ftan->"tg x",
fcot->"cotg x"},ControlType->PopupMenu},
{{bodX,1.5,"Derivace v bodě:"},Dynamic[xmin],Dynamic[xmax],Appearance->"Labeled"},
SaveDefinitions->True]

Z práce studentů

Ukázka použití diferenciálních rovnic

Převzato z ročníkové práce studentů 3. ročníku (V. Myslivec, C. Šup 2008/2009)

m=2;g=9.8;α=(π/4);v0=10;
Manipulate[
SilaX[vx_]:=-k vx Norm[vx];
SilaY[vy_]:=-g m-k vy Norm[vy];

difX=NDSolve[{m rX''[t]==SilaX[rX'[t]],rX[0]==0,rX'[0]==v0 Cos[α]},rX,{t,0,10}];
difY=NDSolve[{m rY''[t]==SilaY[rY'[t]],rY[0]==0,rY'[0]==v0 Sin[α]},rY,{t,0,10}];

Show[
Plot[
X Tan[α]-(9.8/2)(((X/(v0 Cos[α])))^2),
{X, 0,11},
PlotRange-> {{0,12},{0,4}},
AspectRatio->(1/3),
PlotStyle->{Darker[Blue],Thickness[0.01]},
ImageSize->{900,300}
],
ParametricPlot[
{rX[t]/.difX[[1]],rY[t]/.difY[[1]]},
{t,0,10},
PlotRange-> {{0,12},{0,4}},
AspectRatio->(1/3),
PlotStyle->{Orange,Thickness[0.005]},
ImageSize->{900,300}
]
],
{{k,0.1,"Odporová konstanta"},0,0.5,0.01,Appearance->"Labeled"},SaveDefinitions->True
]

Jedna věta z jejich obhajoby této práce: “Zde je nutné zmínit, že na začátku 3. ročníku jsme skoro ani nevěděli jak se derivuje, ale díky Wolfram Mathematice jsme byli schopni použít diferenciální rovnice.”

Využití v odborných předmětech

Vykreslení elektrického pole

Přímo v nápovědě programu Mathematica najdeme tento jednoduchý, ale mocný příklad:

Manipulate[
 ContourPlot[q1/Norm[{x, y} - p[[1]]] + q2/Norm[{x, y} - p[[2]]] ,
  {x, -2, 2}, {y, -2, 2},Contours->10],
 {{q1, -1}, -3, 3},
 {{q2, 1}, -3, 3},
 {{p, {{-1, 0}, {1, 0}}}, {-1, -1}, {1, 1}, Locator},
 Deployed -> True]

Můžeme ho celkem bez velkého přemýšlení ihned rozšířit

Manipulate[
ContourPlot[q1/Norm[{x,y}-p[[1]]]+q2/Norm[{x,y}-p[[2]]]+q3/Norm[{x,y}-p[[3]]],
{x,-2,2},{y,-2,2},Contours->20],
{{q1,1},-3,3},
{{q2,1},-3,3},
{{q3,-1},-3,3},
{{p,{{-1,0},{1,0},{0,-1}}},{-1,-1},{1,1},Locator},
Deployed->True]

Pokud si s ním někdo trochu více pohraje, může to dopadnout například takto:

http://demonstrations.wolfram.com/ElectricFieldsForThreePointCharges/

Amplitudová modulace

http://demonstrations.wolfram.com/AmplitudeModulation/

Typy magnetů v urychlovači LHC:

http://demonstrations.wolfram.com/MagnetTypesInParticleAccelerators/

Možnosti vzužití Mathematicy pro různé studentské projekty

Wolfram Data Drop

Datové úložiště se snadným přístupem z programu Mathematica a širokými možnostmi vkládání dat

Vytvoření Databinu

(* CreateDatabin["Interpretation" -> {"id" -> "Number", "loc" -> "Location", "distance" -> "Number", "bearing" -> "Number", "deviation" -> "Number", "stations" -> "Number", "part" -> "Number", "time" -> "DateTime"}]
*)

Otevření Databinu a načtení dat

mujbin = Databin["6hoz1_m2"]
valbin = Values[mujbin];
(* transformace dat do potřebného formátu *)
velka = Normal[valbin]
tabulka = Transpose[{
    "time" /. velka[[2]],
    "id" /. velka[[6]],
    "loc" /. velka[[3]],
    "distance" /. velka[[7]],
    "deviation" /. velka[[5]],
    "bearing" /. velka[[4]],
    "stations" /. velka[[1]],
    "part" /. velka[[8]]
    }];
Dimensions[tabulka]

(* utřídění dat *)
(* Blesky které detekovala i moje stanice *)
moje=Cases[tabulka,{__,p_}/; p==1];
Length[moje]

(* Blesky na kterých se moje stanice nepodílela *)
cizi=Cases[tabulka,{__,p_}/; p==0];
Length[cizi]

(* moje blesky setříděné podle vzdálenosti *)
mojeNej= Sort[moje,#1[[4]]>#2[[4]]&];

(* moje blesky seřazené podle azimutu *)
mojePol = Sort[moje,#1[[6]]>#2[[6]]&];

(* malý vzorek nejvzdálenějších a nejbližších blesků *)
vzorek=Join[mojeNej[[1;;8]],mojeNej[[-8;;-1]]];
Grid[Prepend[vzorek,Style[#,{Red,Bold,14}]&/@{"time","id","loc","distance","dev","bear","sta","p"}],Frame->All]

A teď už pár ukázek možných výstupů

Všechny nalovené blesky na mapě

GeoListPlot[mojeNej[[1;;1500,3]],PlotMarkers->Style["↧",Red,20],(*GeoRange->{{5,52},{-33,52}},*)GeoGridLines->Quantity[10, "AngularDegrees"],GeoProjection->"Mercator",
ImageSize->Large]

Mapa s vyznačenou vzdáleností od mé stanice

(* Tabulka souřadnic blesků zachycených mojí stanicí *)
mylatlon=Transpose[{QuantityMagnitude[Latitude[moje[[1;;1500,3]]]],QuantityMagnitude[Longitude[moje[[1;;1500,3]]]]}];
(* Souřadnice mé stanice *)
stanice=GeoPosition[{50.021606,14.411118`}];
(* vykreslení mapy *)
GeoGraphics[{Dashed,Thick,
Table[GeoCircle[(Entity["Prague", Entity["City",{"Prague","Prague","CzechRepublic"}], "Entity[\"City\", {\"Prague\", \"Prague\", \"CzechRepublic\"}]", "city"]),Quantity[r,"km"]],{r,1000,9000,1000}],
PointSize[Large],Blue,Point[stanice],PointSize[Large],
(* Blue,Point[GeoPosition[cilatlon]],*)
Red,Point[GeoPosition[mylatlon]]},
GeoCenter->GeoPosition[{00.,39.}],
GeoRange->Quantity[6000,"km"],
GeoProjection->"Mercator",
GeoBackground->Automatic,
ImageSize->{600,600}]

Blízké blesky ve větším detailu

mylatlon=Transpose[{QuantityMagnitude[Latitude[moje[[All,3]]]],QuantityMagnitude[Longitude[moje[[All,3]]]]}];
GeoGraphics[{Dashed,Thick,
Table[GeoCircle[stanice,Quantity[r,"km"]],{r,10,50,10} (* {r,20,400,20} *)],
PointSize[Large],Blue,Point[stanice],PointSize[Medium],
(* Blue,Point[GeoPosition[cilatlon]],*)
Red,Point[GeoPosition[mylatlon]]},
GeoCenter->GeoPosition[stanice],
GeoRange->Quantity[40,"km"],
GeoProjection->"Mercator",
GeoBackground->Automatic,
ImageSize->{600,600}]

Díky za pozornost!